#include "ntddk.h"
#include "Vmm.h"
bool VmIsWhisperInstalled();
bool VmIsSupportVmx();
SharedProcessorData *VmpInitializeSharedData();
NTSTATUS VmpStartVm(void *context);
void VmpInitializeVm(ULONG_PTR guest_stack_pointer, ULONG_PTR guest_instruction_pointer, void *context);
void VmpFreeProcessorData(ProcessorData *processor_data);
void VmpFreeSharedData(ProcessorData *processor_data);
bool IsReleaseBuild();
bool IsX64();

bool VmpInitializeVmcs(ProcessorData *processor_data);
bool VmpSetupVmcs(const ProcessorData *processor_data, ULONG_PTR guest_stack_pointer, ULONG_PTR guest_instruction_pointer, ULONG_PTR vmm_stack_pointer);

ULONG VmpAdjustControlValue(ULONG32 nMsrIndex, ULONG request_value);
ULONG VmpGetSegmentAccessRight(USHORT segment_selector);

ULONG_PTR VmxGetSegmentBase(ULONG_PTR gdt_base, USHORT segment_selector);

void VmTermination();